package com.ruoyi.system.controller;

import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.system.domain.OutapiClientApiRel;
import com.ruoyi.system.domain.OutapiInfo;
import com.ruoyi.system.service.IOutapiClientApiRelService;
import com.ruoyi.system.service.IOutapiInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 对外接口实体Controller
 *
 * @author wjialong
 */
@RestController
@RequestMapping("/outapi/info")
public class OutapiInfoController extends BaseController {
    @Autowired
    private IOutapiInfoService infoService;

    @Autowired
    private IOutapiClientApiRelService relService;

    /**
     * 查询对外接口列表
     */
    @GetMapping("/list")
    public TableDataInfo list(OutapiInfo outapiInfo) {
        startPage();
        List<OutapiInfo> list = infoService.selectOutapiInfoList(outapiInfo);
        return getDataTable(list);
    }

    /**
     * 新增对外接口实体
     */
    @PostMapping
    public AjaxResult add(@RequestBody OutapiInfo outapiInfo) {
        return toAjax(infoService.insertOutapiInfo(outapiInfo));
    }

    /**
     * 发布服务
     *
     * @param outapiInfo
     * @return
     */
    @PostMapping("/online")
    public AjaxResult online(@RequestBody OutapiInfo outapiInfo) {
        String id = outapiInfo.getId();
        OutapiInfo info = infoService.selectOutapiInfoById(id);
        info.setApiStatus("1");
        infoService.updateOutapiInfo(info);
        return AjaxResult.success();
    }

    /**
     * 下线服务
     *
     * @param outapiInfo
     * @return
     */
    @PostMapping("/offline")
    public AjaxResult offline(@RequestBody OutapiInfo outapiInfo) {
        String id = outapiInfo.getId();
        OutapiInfo info = infoService.selectOutapiInfoById(id);
        info.setApiStatus("2");
        infoService.updateOutapiInfo(info);
        return AjaxResult.success();
    }

    /**
     * 修改对外接口实体
     */
    @PutMapping
    public AjaxResult edit(@RequestBody OutapiInfo outapiInfo) {
        return toAjax(infoService.updateOutapiInfo(outapiInfo));
    }

    /**
     * 删除对外接口实体
     */
    @DeleteMapping("/{id}")
    public AjaxResult remove(@PathVariable String id) {
        infoService.deleteOutapiInfoById(id);
        OutapiClientApiRel rel = new OutapiClientApiRel();
        rel.setApiId(id);
        relService.deleteRel(rel);
        return AjaxResult.success();
    }

    /**
     * 获取对外接口实体详细信息
     */
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id) {
        return success(infoService.selectOutapiInfoById(id));
    }

    /**
     * 测试接口 -- 待完善
     *
     * @param id
     * @return
     */
    @GetMapping("/test/{id}")
    public AjaxResult test(@PathVariable String id) {
        return AjaxResult.success("测试成功");
    }

//    /**
//     * 导出对外接口实体列表
//     */
//    @PostMapping("/export")
//    public void export(HttpServletResponse response, OutapiInfo outapiInfo) {
//        List<OutapiInfo> list = infoService.selectOutapiInfoList(outapiInfo);
//        ExcelUtil<OutapiInfo> util = new ExcelUtil<OutapiInfo>(OutapiInfo.class);
//        util.exportExcel(response, list, "对外接口实体数据");
//    }
}
